#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

// 447 时间复杂度O(n^2) 空间复杂度O(n)
class Boomerang{
public:
    int numberOfBoomerangs(vector<pair<int, int>>& points) {
		int res = 0;	// 一共多少个三元组
		for(int i = 0; i < points.size(); i++){
			// record中存储 点i 到所有其他点的距离出现的频次
			unordered_map<int, int> record; 	// 存储 距离 距离出现的频率
			// 遍历其他所有的点
			for(int j = 0; j < points.size();j++){
				if(j != i){		// 找到与i不同的点
					// 计算距离时不开平方根
					record[dis(points[i], points[j])] += 1;// 将ij距离出现的频次++
				}
			}
		
			// 遍历查找表	
			for(unordered_map<int, inty>::iterator iter = record.begin();
				iter != record.end(); iter++){
				if(iter->second >= 2)
					res += (iter->second) * (iter->second - 1);	 // 计算三元组出现频率
			}
		}        
		return res;
    }
private:
	int dis(const pair<int, int> &pa, const pair<int, int> &pb){
		return (pa.first - pb.first) * (pa.first - pb.first) +
			(pa.second - pb.second) * (pa.second - pb.second);
	}
};
